Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Έχω θέμα με τα "Controls"

Îåêßíçóå áðü ôï ìÝëïò AlKiS. Τελευταία δημοσίευση από το μέλος AlKiS στις 15-02-2012, 17:13. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  14-02-2012, 16:39 69332

    Έχω θέμα με τα "Controls"

    Έχω γράψει τον εξής κώδικα:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
        Public Sub doRemoveSkin(ByVal frm As frmMain)
            With frm
                .BackgroundImage = Nothing
    
                .mniFileMenu.ForeColor = SystemColors.ControlText
                .mniActionsMenu.ForeColor = SystemColors.ControlText
                .mniHelpMenu.ForeColor = SystemColors.ControlText
                .mniLinksMenu.ForeColor = SystemColors.ControlText
                .mniSettingsMenu.ForeColor = SystemColors.ControlText
    
                For Each MainCtrl As Control In .Controls
                    If TypeOf MainCtrl Is Button Then
                        DirectCast(MainCtrl, Button).Image = Nothing
                        DirectCast(MainCtrl, Button).ForeColor = SystemColors.ControlText
    
                    ElseIf TypeOf MainCtrl Is Label Then
                        DirectCast(MainCtrl, Label).ForeColor = SystemColors.ControlText
    
                    ElseIf TypeOf MainCtrl Is GroupBox Then
                        DirectCast(MainCtrl, GroupBox).ForeColor = SystemColors.ControlText
    
                        For Each ctrl As Control In DirectCast(MainCtrl, GroupBox).Controls
                            If TypeOf ctrl Is Button Then
                                DirectCast(ctrl, Button).Image = Nothing
                                DirectCast(ctrl, Button).ForeColor = SystemColors.ControlText
    
                            ElseIf TypeOf ctrl Is Label Then
                                DirectCast(ctrl, Label).ForeColor = SystemColors.ControlText
    
                            End If
                        Next
                    End If
                Next
    
    
            End With
        End Sub
    
    
    End Module

    Ο κώδικας αυτός επαναφέρει στα αρχικά δεδομένα οτιδήποτε μπορεί να έχω αλλάξει σε μια φόρμα σε οποιοδήποτε πρόγραμμα μου.

    Θέλω να αλλάξω το ByVal frm As frmMain) σε "As Form" αλλά έχω πρόβλημα με το μενού.

    Έχω ένα κύριο μενού, και μέσα κάποια μενού items. Είδα λοιπόν ότι αυτά είναι ToolStripMenuItem αλλά δεν είναι μέσα στα controls! και δεν μπορώ να γράψω κάτι του τίπου:

    1
    2
    3
    4
     
                For Each MainCtrl As Control In .Controls
                    If TypeOf MainCtrl Is ToolStripMenuItem Then
    
                    End If

    Οπότε αναγκαστικά τα κάνω manually 

    1
    2
    3
    4
    5
     
                .mniFileMenu.ForeColor = SystemColors.ControlText
                .mniActionsMenu.ForeColor = SystemColors.ControlText
                .mniHelpMenu.ForeColor = SystemColors.ControlText
                .mniLinksMenu.ForeColor = SystemColors.ControlText
                .mniSettingsMenu.ForeColor = SystemColors.ControlText

    και οπότε το frm μένει σε As frmMain.


    Πως να κάνω να βλέπει όλα τα menu? 

    δοκίμασα μπας και υπήρχε το For Each mni as ToolStripMenuItems (έβαλα "s" στο τέλος, όπως στα controlS), αλλά δεν υπάρχει........


  •  15-02-2012, 00:48 69338 σε απάντηση της 69332

    Απ: Έχω θέμα με ToolStripMenuItem

    Δεν χρειάζεται να κάνεις enumerate τα ToolStripMenuItem. Τα skins αλλάζουν πολύ εύκολα με το Renderer.
    Φτιάξε κλάσεις για κάθε skin. Μπορείς να αλλάζεις πολλά άλλα εκτός από ForeColor

            public Form1()
            {
                InitializeComponent();
                menuStrip1.Renderer = new BlueTextRenderer();
            }
    
            private class RedTextRenderer : ToolStripProfessionalRenderer
            {
                protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
                {
                    e.TextColor = Color.Red;
                    base.OnRenderItemText(e);
                }
            }
            private class BlueTextRenderer : ToolStripProfessionalRenderer
            {
                protected override void OnRenderItemText(ToolStripItemTextRenderEventArgs e)
                {
                    e.TextColor = Color.Blue;
                    base.OnRenderItemText(e);
                }
            }

  •  15-02-2012, 10:13 69339 σε απάντηση της 69338

    Απ: Έχω θέμα με ToolStripMenuItem

    Ευχαριστώ,

    όμως θα με βοηθούσε πολύ να το κάνω με τον συγκεκριμένο τρόπο.

    Μήπως ξέρεις τι μπορώ να βάλω το For Each για να ελέγχο TypeOf x Is ToolStripMenuItem >


  •  15-02-2012, 11:22 69340 σε απάντηση της 69339

    Απ: Έχω θέμα με ToolStripMenuItem

    Πρέπει να πας στα Items του menustrip κοιτάζοντας να είναι ToolStripMenuItem.
    Μετά για κάθε ToolStripMenuItem αναδρομικά στα DropDownItems (ελέγχοντας να είναι ToolStripMenuItem και αυτά). 
    Δοκίμασα αυτό σε C# (βάζοντας μέσα και ToolStripComboBox, ToolStripTextBox) και νομίζω είναι OK.
            private void button1_Click(object sender, EventArgs e)
            {
                foreach(var item in menuStrip1.Items)
                    if(item is ToolStripMenuItem)
                    {
                        ((ToolStripMenuItem)item).ForeColor = Color.Red;
                        SetTextColor(Color.Red, (ToolStripMenuItem)item);
                    }
            }
    
            private void SetTextColor(Color c, ToolStripMenuItem toolStripmenuItem)
            {
                foreach(var item in toolStripmenuItem.DropDownItems)
                    if(item is ToolStripMenuItem)
                    {
                        ((ToolStripMenuItem)item).ForeColor = c;
                        SetTextColor(c, (ToolStripMenuItem)item);
                    }
            }

  •  15-02-2012, 17:13 69344 σε απάντηση της 69340

    Απ: Έχω θέμα με ToolStripMenuItem

    okay, πήρα το δικό σου, το άλλαξα λιγάκι:

    1
    2
    3
    4
    5
     
                For Each item As Object In .MainMenuStrip.Items
                    If TypeOf item Is ToolStripMenuItem Then
                        DirectCast(item, ToolStripMenuItem).ForeColor = SystemColors.ControlText
                    End If
                Next
    και παίζει μια χαρούλα


    Ευχαριστώ πολύ :)


Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems